使用光源节点

光源节点可用于为您的Kanzi 应用程序场景 (Scene) 创建光源。

Kanzi 有以下光源节点类型:

光源包含在 Kanzi 渲染 3D 节点时作为 uniform 传送给着色器的属性。光源只会影响将材质与使用那些光源的着色器配合使用的那些节点的渲染。在 Kanzi 中,冯氏 (Phong) 材质类型默认支持一个方向光、两个点光源和一个聚光灯。请参阅为材质类型设置光源数量

创建光源节点

要创建光源节点:

  1. 工程 (Project)按下 Alt 并右键点击 要在其中创建光源节点的那个节点,然后选择方向光 (Directional Light)点光源 (Point Light)聚光灯 (Spot Light)
    例如,创建聚光灯 (Spot Light)
    请注意,您只能 场景 (Scene) 和 3D 节点内创建光源节点。
  2. 预览 (Preview) 中,使用节点工具 (Node tool) 定位光源节点。
  3. 属性 (Properties) 中,调整光源节点的属性,以创建适合您需求的光源。
    例如,要调整聚光灯 (Spot Light) 的颜色,请设置聚光灯颜色 (Spot Light Color) 属性。

为材质类型设置光源数量

对于每个材质类型,您可以设置基于这些材质类型的那些材质可用于渲染节点的光源类型和数量。

要为材质类型设置光源数量:

  1. 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中,选择要为其设置光源的材质类型。
    例如,选择VertexPhong 材质类型。
    您只能将这种方法用于冯氏 (Phong) 材质类型。要修改其他材质类型的光源数量,您必须手动编辑材质着色器。请参阅编辑着色器

  2. 预处理器定义 (Preprocessor Defines) 属性中的属性 (Properties) 中,对于每个光源类型,将值 (Value) 设置为要使用的光源的数量:例如,要将材质设置为使用 4 个聚光灯,请将 KANZI_SHADER_NUM_SPOT_LIGHTS 值 (Value) 设置为 4 并按下 Enter 键。现在,使用材质类型的所有材质都可以渲染 4 个聚光灯。如果场景包含 4 个以上的聚光灯,则只有场景中的前 4 个光源会影响将材质与材质类型配合使用的那些节点的渲染。
    当按下 Enter 键时,Kanzi Studio 会在 Uniforms 中为您更改的光源类型的属性更新 uniform 数组。

在 API 中使用光源节点

要创建并设置方向光:

//创建一个名为 Directional light 的方向光。
LightSharedPtr directionalLight = Light::createDirectional(domain, "Directional light");
//将方向光节点围绕 x 轴旋转 -45 度。
SRTValue3D layoutTransformation = directionalLight->getLayoutTransformation();
layoutTransformation.setRotation(Vector3(kzsDegreesToRadians(-45.0f), 0.0f, 0.0f));
directionalLight->setLayoutTransformation(layoutTransformation);
//将方向光的颜色设置为红色。
directionalLight->setDirectionalLightColor(ThemeRed);

要创建并设置点光源:

//创建一个名为 Point light 的点光源。
LightSharedPtr pointLight = Light::createPoint(domain, "Point light");
//将 y 轴上的点光源移动 4 个单位。
SRTValue3D layoutTransformation = pointLight->getLayoutTransformation();
layoutTransformation.setTranslation(Vector3(0.0f, 4.0f, 0.0f));
pointLight->setLayoutTransformation(layoutTransformation);
//将点光源的颜色设置为绿色。
pointLight->setPointLightColor(ThemeGreen);
//将点光源的恒定衰减设置为 0.8,并将线性衰减和二次衰减设置为 0。
pointLight->setPointLightAttenuation(Vector3(0.8f, 0.0f, 0.0f));

要创建并设置聚光灯:

//创建一个名为 Spot light 的聚光灯。
LightSharedPtr spotLight = Light::createSpot(domain, "Spot light");
//将 x 轴上的聚光灯移动 4 个单位,并将其围绕 y 轴旋转 90 度。
SRTValue3D layoutTransformation = spotLight->getLayoutTransformation();
layoutTransformation.setTranslation(Vector3(4.0f, 0.0f, 0.0f));
layoutTransformation.setRotation(Vector3(0.0f, kzsDegreesToRadians(90.0f), 0.0f));
spotLight->setLayoutTransformation(layoutTransformation);
//将聚光灯的颜色设置为蓝色。
spotLight->setSpotLightColor(ThemeBlue);
//将聚光灯椎体的角度设置为 45 度。
spotLight->setSpotLightCutoffAngle(45.0f);
//设置聚光灯如何聚光。
spotLight->setSpotLightExponent(30.0f);
//将聚光灯的恒定衰减设置为 1.3,并将线性衰减和二次衰减设置为 0。
spotLight->setSpotLightAttenuation(Vector3(1.3f, 0.0f, 0.0f));

有关详细信息,请参阅 API reference中的 Light 类。

光源节点属性类型

要查看光源节点可用属性类型的完整列表,请参阅:

另请参阅

着色器

编辑着色器

使用材质类型